package com.nvwa.localcache;

import java.util.Date;
import java.util.function.Supplier;

/**
 * 缓存对象容器
 */
public class CacheData<T> {
    /**
     * 缓存的数据，可以是任意类型的对象
     */
    public T data;

    /**
     * 过期时间 小于等于0标识永久存活
     */
    public long expire;

    /**
     * 死亡时间
     */
    public long deadTime;

    /**
     * 还可以增加一个数据装载器，如果缓存中没有数据或者已经过期，则调用数据装载器加载最新的数据并且加入缓存，并返回。
     */
    public Supplier<T> load;

    /**
     * 创建缓存数据
     *
     * @param t      缓存的数据，可以是任意类型的对象
     * @param expire 过期时间，单位是秒
     */
    CacheData(T t, int expire) {
        this.data = t;
        this.expire = expire <= 0 ? 0 : expire * 1000L;
        this.deadTime = new Date().getTime() + this.expire;
    }

    /**
     * 创建缓存数据
     *
     * @param t      缓存的数据，可以是任意类型的对象
     * @param expire 过期时间，单位是秒
     * @param load   数据装载器
     */
    CacheData(T t, int expire, Supplier<T> load) {
        this(t, expire);
        this.load = load;
    }

}
